//求最长不下降子序列
#include <iostream>
using namespace std;
const int MAXN=1000;
int a[MAXN+1];
int n;
int maxlen[MAXN+1];//maxlen[i]表示从第i个元素开始到最后一个元素，以a[i]为起始的最长子序列长度
int nextindex[MAXN+1];//当maxlen[i]取得最大长度时，接在a[i]之后的下一个元素的下标

int main(){
    n=1;
    while(cin>>a[n]) n++;
    n--;
    //动规
    maxlen[n]=1;
    nextindex[n]=0;
    for(int i=n-1;i>=1;i--){
        maxlen[i]=1;
        nextindex[i]=0;
        for(int j=i+1;j<=n;j++){
            if ((a[j]>a[i])&&(maxlen[j]+1>maxlen[i])){
                maxlen[i]=maxlen[j]+1;
                nextindex[i]=j;
            }
        }
    }
    //得到最优解
    int ans=0;
    int ans_index;
    for(int i=1;i<=n;i++){
        if (maxlen[i]>ans){
            ans=maxlen[i];
            ans_index=i;
        }
    }
    //输出
    cout<<ans<<endl;
    int i=ans_index;
    while(i>0){
        cout<<a[i]<<' ';
        i=nextindex[i];
    }
}